package org.esreport;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONArray;
public class MailAPI {
Properties properties = new Properties();
Properties eMailProperties = new Properties();
Session session;
MimeMessage message;
Multipart multipart = new MimeMultipart();
BodyPart messageBodyPart = null;
MailAPI() {
try {
File jarPath = new File(MailAPI.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath = jarPath.getParentFile().getAbsolutePath();
eMailProperties.load(new FileInputStream(propertiesPath + "/properties/mail.properties"));
session = Session.getInstance(eMailProperties, null);
} catch (IOException e) {
e.printStackTrace();
}
message = new MimeMessage(session);
}
public void setFrom(String fromLocal) {
InternetAddress from;
try {
from = new InternetAddress(fromLocal);
message.setFrom(from);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public void setSubject(String subject) {
try {
message.setSubject(subject);
} catch (MessagingException e) {
e.printStackTrace();
}
}
public void addRecipients(String[] eMailList) {
for (int i = 0; i < eMailList.length; i++) {
try {
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(eMailList[i]));
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
public void addRecipients(JSONArray eMailList) {
for (int i = 0; i < eMailList.length(); i++) {
try {
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(eMailList.getString(i)));
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
public void setText(String mailContent) {
try {
message.setText(mailContent);
} catch (MessagingException e) {
e.printStackTrace();
}
}
public void attachWB(XSSFWorkbook wb, String fileName) {
messageBodyPart = new MimeBodyPart();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataSource ds = null;
try {
wb.write(baos);
byte[] bytes = baos.toByteArray();
ds = new ByteArrayDataSource(bytes, "application/excel");
DataHandler dh = new DataHandler(ds);
messageBodyPart.setDataHandler(dh);
messageBodyPart.setFileName(fileName + ".xlsx");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
} catch (IOException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
public void send() {
Transport transport;
try {
transport = session.getTransport("smtp");
transport.connect(eMailProperties.getProperty("username"), eMailProperties.getProperty("password"));
transport.sendMessage(message, message.getAllRecipients());
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}